// 1-20 实例-20 猴子吃桃问题
/**
 * 一只小猴子一天摘了许多桃子，第一天吃了一半，然后忍不住又吃了一个；第二天又吃了一半，再加上一个；后面每天都是这样吃。到第10天的时候，小猴子发现只有一个桃子了。问小猴子第一天共摘了多少个桃子。
 */
#include <iostream>
int fun1(void);
int fun2(int);
int fun3(int, int);
int main(void)
{
  // int n = fun1();
  // int n = fun2(10);
  int n = fun3(10, 1);
  std::cout << "第一天一共摘了" << n << "个桃子" << std::endl;
  printf("---------------end-----------------\n");
  return 0;
}

int fun1(void)
{
  int n = 1;
  for (int i = 10; i >= 1; i--)
  {

    if (i != 10)
    {
      n = (n + 1) * 2;
      int m = n / 2 + 1;
      std::cout << "第" << i << "天还有" << n << "个桃,这天吃" << m << "个桃子" << std::endl;
    }
    else
    {
      std::cout << "第" << i << "天还有" << n << "个桃" << std::endl;
    }
  }
  return n;
}

// 递归求解1
int fun2(int n)
{
  int i;
  if (n == 1)
  {
    i = 1;
  }
  else
  {
    i = 2 * (fun2(n - 1) + 1);
  }
  return i;
}

// 递归求解2
int fun3(int d, int n)
{
  if (d == 1)
  {
    return n;
  }
  fun3(d - 1, 2 * (n + 1));
}